#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;

// 复习
// 倒着遍历  rbegin

void func(const string &s)
{ // const 要匹配const、的

    auto it = s.rbegin(); //*it='x';不易察觉
    // string::const_reverse_iterator it = s.rbegin();
    while (it != s.rend())
    {
        //*it='x';
        cout << *it << "";
        ++it;
    }
    cout << endl;
}
// 普通迭代器和const迭代器的区别在于， 不能修改
int main()
{
    string s1 = "hello world";
    // auto it1 = s1.rbegin();
    string::reverse_iterator it1 = s1.rbegin();
    while (it1 != s1.rend())
    {
        //*it1='x';
        cout << *it1 << "";
        ++it1;
    }
    cout << endl;
}
// const的反向迭代器一般都不会用，要用就用下标，不然太麻烦了 ，不过类型可以用auto(但出错了不易察觉，比如const的 我修改了)。
// 但还是要掌握迭代器，因为有其他的数据结构

// crbegin 和 crend 就是仅返回const的反向迭代器，C++11里面的  但少用

// maxsize
// int main()
//{
//
//	string s1;
//	string s2()
//	return 0;
// }

//-------------reserve
#include <iostream>
#include <string>
using namespace std;

// int main() {
//     string str = "Hello,wordl"; // 初始字符串
//     cout <<"原始容量:"<< str.capacity() << endl;
//
//     str.reserve(100);
//     cout <<"新容量:"<< str.capacity() << endl;
//
//     // 这里的reserve调用并不会改变字符串的内容或大小
//     cout << str << endl;
//     cout << str.size() << endl;
//     cout << endl;
//
//     //预留的空间大小小于或等于当前字符串的容量，则不会改变容量
//     str.reserve(2);
//     cout << "新容量:" << str.capacity() << endl;
//     cout << str << endl;
//     cout << str.size() << endl;
//     return 0;
// }

// int main()
//{
//	string s1;
//	cout << s1.capacity() << endl;
//	s1.reserve(10);
//	cout << s1.capacity() << endl;
//
//
//	string s2("hello worldxxxxxxxxxxxxx");
//	cout << s2.capacity() << endl;
//	s2.reserve(10);
//	cout << s2.capacity() << endl;
//
//	return 0;
// }

//--------resize

// int main()
//{
//	string s1("hello world");
//	cout << s1.size() << endl;
//	cout << s1.capacity() << endl;
//	cout << s1 << endl;
//
//	//n > capacity -> 扩容+尾插
//	//s1.resize(100);
//	s1.resize(100, 'x');
//	cout << s1.size() << endl;
//	cout << s1.capacity() << endl;
//	cout << s1 << endl;
//	cout << "-----------------" << endl;
//	// size < n < capacity  -> 尾插
//	string s2("hello world");
//	cout << s2.size() << endl;
//	cout << s2.capacity() << endl;
//	cout << s2 << endl;
//	s2.resize(12);
//	cout << s2.size() << endl;
//	cout << s2.capacity() << endl;
//	cout << "-----------------" << endl;
//	// n < size -> 删除数据，保留前n个
//	string s3("hello world");
//	cout << s3.size() << endl;
//	cout << s3.capacity() << endl;
//	cout << s3 << endl;
//	s3.resize(5);
//	cout << s3.size() << endl;
//	cout << s3.capacity() << endl;
//	cout << "-----------------" << endl;
//	string s5;
//	s5.resize(100, '#');
//	cout << s5 << endl;
//
//	return 0;
// }

// #include <iostream>
// #include <string>
//
// int main() {
//     string s = "Example";
//     cout << "Original string: " << s << endl;
//     cout << "capacity:" << s.capacity() << endl;
//
//     // 使用resize增加字符串长度到15个字符，超出部分用'\0'填充
//     s.resize(15);
//     cout << "After resize to 15 : " << s << endl;
//
//     // 使用resize减少字符串长度到3个字符，截断尾部字符
//     s.resize(3);
//     cout << "After resize to 3: " << s << endl;
//     cout <<"capacity:"<< s.capacity() << endl;
//
//     // 再次使用resize，这次增加长度到10，并使用字符'x'填充
//     s.resize(100, 'x');
//     cout << "After resize to 10 with 'x': " << s << endl;
//     cout << "capacity:" << s.capacity() << endl;
//     return 0;
// }

// operator[]			Get character of string(public member function)
// at					Get character in string(public member function)

// 第一个之前讲了
// 第二个  越界会报错
// int main()
//{
//	try
//	{
//		string s1("hello world");// 加上\0 一共12个
//		cout << s1[11];//相当于访问第13个位置
//		//cout << s1[20];
//
//		cout << s1.at(20);
//	}
//	catch (const exception& e)
//	{
//		cout << e.what() << endl;
//	}
//	return 0;
//
// }

// 增删查改

// int main()
//{
//	string s1("hello");
//	s1.push_back(' ');
//	s1.append("world");
//	cout << s1 << endl;
//
//	string s2 = "xxxx";
//	const string& s3 = "aaaa";
//	s2.append(s1.begin(), s1.end()); //append一段区间
//	cout << s2 << endl;
//
//	s1 += "hhhh";
//
//
// }

// inset  erase find 下节课讲

//------------检测扩容机制
// #include <iostream>
// #include <string>
//
// using namespace std;
//
// int main() {
//    // 创建一个空的字符串对象
//    string str;
//
//    // 输出字符串的初始容量和长度
//    cout << "Initial Capacity: " << str.capacity() << endl; // 输出初始容量
//    cout << "Initial Length: " << str.length() << endl; // 输出初始长度
//
//    // 添加字符到字符串中，观察容量和长度的变化
//    for (int i = 0; i < 20; ++i) {
//        str += 'a'; // 添加字符'a'到字符串末尾
//        cout << "Capacity after adding " << (i + 1) << " characters: " << str.capacity() << endl; // 输出添加字符后的容量
//        cout << "Length after adding " << (i + 1) << " characters: " << str.length() << endl; // 输出添加字符后的长度
//    }
//
//    return 0;
//}
